<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
<html><head><meta name="qrichtext" content="1" /><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><style type="text/css">
p, li { white-space: pre-wrap; }
</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:9pt; font-weight:400; font-style:normal;">
<p style=" margin-top:18px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:xx-large; font-weight:600;">Как обратиться к диапазону из VBA</span> </p>
<p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Полагаю не совру когда скажу, что все кто программирует в VBA очень часто в своих кодах общаются к ячейкам листов. Ведь это чуть ли не основное предназначение VBA в Excel. В принципе ничего сложного в этом нет. Например, чтобы записать в ячейку A1 слово <span style=" font-weight:600;">Привет</span> необходимо выполнить код: </p>
<p style=" margin-top:12px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; line-height:15px;"><a name="crayon-5a4ce6b754732575067863"></a><span style=" font-size:12px;">R</span><span style=" font-size:12px;">ange(&quot;A1&quot;).Value = &quot;Привет&quot;</span><span style=" font-size:12px;"> </span></p>
<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:12px;"><br /></p>
<table border="0" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px;" cellspacing="2" cellpadding="0">
<tr>
<td>
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; line-height:15px;"><span style=" font-size:12px;">1 </span></p></td>
<td>
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; line-height:15px;"><a name="crayon-5a4ce6b754732575067863-1"></a><span style=" font-size:12px;">R</span><span style=" font-size:12px;">ange</span><span style=" font-size:12px;">(&quot;A1&quot;).Value = &quot;Привет&quot;</span></p></td></tr></table>
<p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Тоже самое можно сделать сразу для нескольких ячеек: </p>
<p style=" margin-top:12px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; line-height:15px;"><a name="crayon-5a4ce6b75473c354646795"></a><span style=" font-size:12px;">R</span><span style=" font-size:12px;">ange(&quot;A1:C10&quot;).Value = &quot;Привет&quot;</span><span style=" font-size:12px;"> </span></p>
<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:12px;"><br /></p>
<table border="0" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px;" cellspacing="2" cellpadding="0">
<tr>
<td>
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; line-height:15px;"><span style=" font-size:12px;">1 </span></p></td>
<td>
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; line-height:15px;"><a name="crayon-5a4ce6b75473c354646795-1"></a><span style=" font-size:12px;">R</span><span style=" font-size:12px;">ange</span><span style=" font-size:12px;">(&quot;A1:C10&quot;).Value = &quot;Привет&quot;</span></p></td></tr></table>
<p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Если необходимо обратиться к <a href="http://www.excel-vba.ru/chto-umeet-excel/imenovannye-diapazony/"><span style=" text-decoration: underline; color:#0000ff;">именованному диапазону</span></a>: </p>
<p style=" margin-top:12px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; line-height:15px;"><a name="crayon-5a4ce6b754742535394211"></a><span style=" font-size:12px;">R</span><span style=" font-size:12px;">ange(&quot;Диапазон1&quot;).Select</span><span style=" font-size:12px;"> </span></p>
<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:12px;"><br /></p>
<table border="0" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px;" cellspacing="2" cellpadding="0">
<tr>
<td>
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; line-height:15px;"><span style=" font-size:12px;">1 </span></p></td>
<td>
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; line-height:15px;"><a name="crayon-5a4ce6b754742535394211-1"></a><span style=" font-size:12px;">R</span><span style=" font-size:12px;">ange</span><span style=" font-size:12px;">(&quot;Диапазон1&quot;).Select</span></p></td></tr></table>
<p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Но в VBA есть и альтернативный метод записи значений в ячейке - через объект Cells: </p>
<p style=" margin-top:12px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; line-height:15px;"><a name="crayon-5a4ce6b754747090612111"></a><span style=" font-size:12px;">C</span><span style=" font-size:12px;">ells(1, 1).Value = &quot;Привет&quot;</span><span style=" font-size:12px;"> </span></p>
<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:12px;"><br /></p>
<table border="0" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px;" cellspacing="2" cellpadding="0">
<tr>
<td>
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; line-height:15px;"><span style=" font-size:12px;">1 </span></p></td>
<td>
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; line-height:15px;"><a name="crayon-5a4ce6b754747090612111-1"></a><span style=" font-size:12px;">C</span><span style=" font-size:12px;">ells</span><span style=" font-size:12px;">(1, 1).Value = &quot;Привет&quot;</span></p></td></tr></table>
<p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Синтаксис объекта Range:<br />Range(<span style=" font-weight:600;">Cell1</span>, <span style=" font-weight:600;">Cell2</span>)</p>
<ul style="margin-top: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; -qt-list-indent: 1;"><li style=" margin-top:12px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Cell1</span> - первая ячейка диапазона. Может быть ссылкой на ячейку или диапазон ячеек, текстовым представлением адреса или имени диапазона/ячейки. Допускается указание несвязанных диапазонов(A1,B10), пересечений(A1 B10).</li>
<li style=" margin-top:0px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Cell2</span> - последняя ячейка диапазона. Необязательна к указанию. Допускается указание ссылки на ячейку, столбец или строку.</li></ul>
<p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Синтаксис объекта Cells:<br />Cells(<span style=" font-weight:600;">Rowindex</span>, <span style=" font-weight:600;">Columnindex</span>)</p>
<ul style="margin-top: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; -qt-list-indent: 1;"><li style=" margin-top:12px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Rowindex</span> - номер строки</li>
<li style=" margin-top:0px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Columnindex</span> - номер столбца</li></ul>
<p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Исходя из этого несложно предположить, что к диапазону можно обратиться, используя Cells и Range: </p>
<p style=" margin-top:12px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; line-height:15px;"><a name="crayon-5a4ce6b75474c884535339"></a><span style=" font-size:12px;">'</span><span style=" font-size:12px;">выделяем диапазон &quot;A1:B10&quot; на активном листе Range(Cells(1,1), Cells(10,2)).Select</span><span style=" font-size:12px;"> </span></p>
<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:12px;"><br /></p>
<table border="0" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px;" cellspacing="2" cellpadding="0">
<tr>
<td>
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; line-height:15px;"><span style=" font-size:12px;">1</span></p>
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:12px;">2 </span></p></td>
<td>
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; line-height:15px;"><a name="crayon-5a4ce6b75474c884535339-1"></a><span style=" font-size:12px;">'</span><span style=" font-size:12px;">выделяем диапазон &quot;A1:B10&quot; на активном листе</span></p>
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a name="crayon-5a4ce6b75474c884535339-2"></a><span style=" font-size:12px;">R</span><span style=" font-size:12px;">ange</span><span style=" font-size:12px;">(Cells(1,1), Cells(10,2)).Select</span></p></td></tr></table>
<p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">и для чего? Ведь можно гораздо короче: </p>
<p style=" margin-top:12px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; line-height:15px;"><a name="crayon-5a4ce6b754751038203018"></a><span style=" font-size:12px;">R</span><span style=" font-size:12px;">ange(&quot;A1:B10&quot;).Select</span><span style=" font-size:12px;"> </span></p>
<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:12px;"><br /></p>
<table border="0" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px;" cellspacing="2" cellpadding="0">
<tr>
<td>
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; line-height:15px;"><span style=" font-size:12px;">1 </span></p></td>
<td>
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; line-height:15px;"><a name="crayon-5a4ce6b754751038203018-1"></a><span style=" font-size:12px;">R</span><span style=" font-size:12px;">ange</span><span style=" font-size:12px;">(&quot;A1:B10&quot;).Select</span></p></td></tr></table>
<p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Иногда обращение посредством Cells куда удобнее. Например для цикла по столбцам(да еще и с шагом 3) совершенно неудобно было бы использовать буквенное обозначение столбцов.<br />Объект Cells так же можно использовать для указания ячеек внутри непосредственно указанного диапазона. Например, Вам необходимо выделить ячейку в 3 строке и 2 столбце диапазона &quot;D5:F56&quot;. Можно пройтись по листу и посмотреть, отсчитать нужное количество строк и столбцов и понять, что это будет &quot;E7&quot;. А можно сделать проще: </p>
<p style=" margin-top:12px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; line-height:15px;"><a name="crayon-5a4ce6b754756447794754"></a><span style=" font-size:12px;">R</span><span style=" font-size:12px;">ange(&quot;D5:F56&quot;).Cells(3, 2).Select</span><span style=" font-size:12px;"> </span></p>
<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:12px;"><br /></p>
<table border="0" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px;" cellspacing="2" cellpadding="0">
<tr>
<td>
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; line-height:15px;"><span style=" font-size:12px;">1 </span></p></td>
<td>
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; line-height:15px;"><a name="crayon-5a4ce6b754756447794754-1"></a><span style=" font-size:12px;">R</span><span style=" font-size:12px;">ange</span><span style=" font-size:12px;">(&quot;D5:F56&quot;).Cells(3, 2).Select</span></p></td></tr></table>
<p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Согласитесь, это гораздо удобнее, чем отсчитывать каждый раз. Особенно, если придется оперировать смещением не на 2-3 ячейки, а на 20 и более. Конечно, можно было бы применить Offset. Но данное свойство именно смещает диапазон на указанное количество строк и столбцов и придется уменьшать на 1 смещение каждого параметра для получения нужной ячейки. Да и смещает на указанное количество строк и столбцов весь диапазон, а не одну ячейку. Это, конечно, тоже не проблема - можно вдобавок к этому использовать метод Resize - но запись получится несколько длиннее и менее наглядной: </p>
<p style=" margin-top:12px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; line-height:15px;"><a name="crayon-5a4ce6b75475c604071460"></a><span style=" font-size:12px;">R</span><span style=" font-size:12px;">ange(&quot;D5:F56&quot;).Offset(2, 1).Resize(1, 1).Select</span><span style=" font-size:12px;"> </span></p>
<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:12px;"><br /></p>
<table border="0" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px;" cellspacing="2" cellpadding="0">
<tr>
<td>
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; line-height:15px;"><span style=" font-size:12px;">1 </span></p></td>
<td>
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; line-height:15px;"><a name="crayon-5a4ce6b75475c604071460-1"></a><span style=" font-size:12px;">R</span><span style=" font-size:12px;">ange</span><span style=" font-size:12px;">(&quot;D5:F56&quot;).Offset(2, 1).Resize(1, 1).Select</span></p></td></tr></table>
<p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">И неплохо бы теперь понять, как значение диапазона присвоить переменной. Для начала переменная должна быть объявлена с типом Range. А т.к. Range относится к глобальному типу Object, то присвоение значения такой переменной должно быть обязательно с применением оператора Set: </p>
<p style=" margin-top:12px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; line-height:15px;"><a name="crayon-5a4ce6b754761934655622"></a><span style=" font-size:12px;">D</span><span style=" font-size:12px;">im rR as Range Set rR = Range(&quot;D5&quot;)</span><span style=" font-size:12px;"> </span></p>
<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:12px;"><br /></p>
<table border="0" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px;" cellspacing="2" cellpadding="0">
<tr>
<td>
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; line-height:15px;"><span style=" font-size:12px;">1</span></p>
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:12px;">2 </span></p></td>
<td>
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; line-height:15px;"><a name="crayon-5a4ce6b754761934655622-1"></a><span style=" font-size:12px;">D</span><span style=" font-size:12px;">im</span><span style=" font-size:12px;"> rR as Range</span></p>
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a name="crayon-5a4ce6b754761934655622-2"></a><span style=" font-size:12px;">S</span><span style=" font-size:12px;">et</span><span style=" font-size:12px;"> rR = Range(&quot;D5&quot;)</span></p></td></tr></table>
<p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">если оператор Set не применять, то в лучшем случае получите ошибку, а в худшем(он возможен, если переменной rR не назначать тип) переменной будет назначено значение Null или значение ячейки по умолчанию. Почему это хуже? Потому что в таком случае код продолжит выполняться, но логика кода будет неверной, т.к. эта самая переменная будет содержать значение неверного типа и применение её в коде в дальнейшем все равно приведет к ошибке. Только ошибку эту отловить будет уже сложнее.<br />Использовать же такую переменную в дальнейшем можно так же, как и прямое обращение к диапазону: </p>
<p style=" margin-top:12px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; line-height:15px;"><a name="crayon-5a4ce6b754766455562486"></a><span style=" font-size:12px;">r</span><span style=" font-size:12px;">R.Select</span><span style=" font-size:12px;"> </span></p>
<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:12px;"><br /></p>
<table border="0" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px;" cellspacing="2" cellpadding="0">
<tr>
<td>
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; line-height:15px;"><span style=" font-size:12px;">1 </span></p></td>
<td>
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; line-height:15px;"><a name="crayon-5a4ce6b754766455562486-1"></a><span style=" font-size:12px;">r</span><span style=" font-size:12px;">R</span><span style=" font-size:12px;">.Select</span></p></td></tr></table>
<p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Вроде бы на этом можно было завершить, но...Это как раз только начало. То, что я написал выше знает практически каждый, кто пишет в VBA. Основной же целью этой статьи было пояснить некоторые нюансы обращения к диапазонам. Итак, поехали.</p>
<p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Обычно макрорекордер при обращении к диапазону(да и любым другим объектам) сначала его выделяет, а потом уже изменяет свойство или вызывает некий метод: </p>
<p style=" margin-top:12px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; line-height:15px;"><a name="crayon-5a4ce6b75476b313811497"></a><span style=" font-size:12px;">'</span><span style=" font-size:12px;">так выглядит запись слова Test в ячейку А1 Range(&quot;A1&quot;).Select Selection.Value = &quot;Test&quot;</span><span style=" font-size:12px;"> </span></p>
<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:12px;"><br /></p>
<table border="0" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px;" cellspacing="2" cellpadding="0">
<tr>
<td>
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; line-height:15px;"><span style=" font-size:12px;">1</span></p>
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:12px;">2</span></p>
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:12px;">3 </span></p></td>
<td>
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; line-height:15px;"><a name="crayon-5a4ce6b75476b313811497-1"></a><span style=" font-size:12px;">'</span><span style=" font-size:12px;">так выглядит запись слова Test в ячейку А1</span></p>
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a name="crayon-5a4ce6b75476b313811497-2"></a><span style=" font-size:12px;">R</span><span style=" font-size:12px;">ange</span><span style=" font-size:12px;">(&quot;A1&quot;).Select</span></p>
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a name="crayon-5a4ce6b75476b313811497-3"></a><span style=" font-size:12px;">S</span><span style=" font-size:12px;">election</span><span style=" font-size:12px;">.Value = &quot;Test&quot;</span></p></td></tr></table>
<p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Но как правило выделение - действие лишнее. Можно записать значение и без него: </p>
<p style=" margin-top:12px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; line-height:15px;"><a name="crayon-5a4ce6b754770405913848"></a><span style=" font-size:12px;">'</span><span style=" font-size:12px;">запишем слово Test в ячейку A1 на активном листе Range(&quot;A1&quot;).Value = &quot;Test&quot;</span><span style=" font-size:12px;"> </span></p>
<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:12px;"><br /></p>
<table border="0" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px;" cellspacing="2" cellpadding="0">
<tr>
<td>
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; line-height:15px;"><span style=" font-size:12px;">1</span></p>
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:12px;">2 </span></p></td>
<td>
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; line-height:15px;"><a name="crayon-5a4ce6b754770405913848-1"></a><span style=" font-size:12px;">'</span><span style=" font-size:12px;">запишем слово Test в ячейку A1 на активном листе</span></p>
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a name="crayon-5a4ce6b754770405913848-2"></a><span style=" font-size:12px;">R</span><span style=" font-size:12px;">ange</span><span style=" font-size:12px;">(&quot;A1&quot;).Value = &quot;Test&quot;</span></p></td></tr></table>
<p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Теперь чуть подробнее разберем, как обратиться к диапазону не выделяя его и при этом сделать все правильно. Диапазон и ячейка - это объекты листа. У каждого объекта есть родитель - грубо говоря это другой объект, который является управляющим для дочернего объекта. Для ячейки родительский объект - Лист, для Листа - Книга, для Книги - Приложение Excel. Если смотреть на иерархию зависимости объектов, то от старшего к младшему получится так:<br />Applicaton =&gt; Workbooks =&gt; Sheets =&gt; Range<br />По умолчанию для всех диапазонов и ячеек родительским объектом является текущий(активный) лист. Т.е. если для диапазона(ячейки) не указать явно лист, к которому он относится, в качестве родительского листа для него будет использован текущий - ActiveSheet: </p>
<p style=" margin-top:12px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; line-height:15px;"><a name="crayon-5a4ce6b754775347219773"></a><span style=" font-size:12px;">'</span><span style=" font-size:12px;">запишем слово Test в ячейку A1 на активном листе Range(&quot;A1&quot;).Value = &quot;Test&quot;</span><span style=" font-size:12px;"> </span></p>
<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:12px;"><br /></p>
<table border="0" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px;" cellspacing="2" cellpadding="0">
<tr>
<td>
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; line-height:15px;"><span style=" font-size:12px;">1</span></p>
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:12px;">2 </span></p></td>
<td>
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; line-height:15px;"><a name="crayon-5a4ce6b754775347219773-1"></a><span style=" font-size:12px;">'</span><span style=" font-size:12px;">запишем слово Test в ячейку A1 на активном листе</span></p>
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a name="crayon-5a4ce6b754775347219773-2"></a><span style=" font-size:12px;">R</span><span style=" font-size:12px;">ange</span><span style=" font-size:12px;">(&quot;A1&quot;).Value = &quot;Test&quot;</span></p></td></tr></table>
<p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Т.е. если в данный момент активен Лист1 - то слово <span style=" font-weight:600;">Test</span> будет записано в ячейку А1 Лист1. Если активен Лист3 - в А1 Лист3. Иначе говоря такая запись равносильна записи: </p>
<p style=" margin-top:12px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; line-height:15px;"><a name="crayon-5a4ce6b75477a888607478"></a><span style=" font-size:12px;">A</span><span style=" font-size:12px;">ctiveSheet.Range(&quot;A1&quot;).Value = &quot;Test&quot;</span><span style=" font-size:12px;"> </span></p>
<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:12px;"><br /></p>
<table border="0" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px;" cellspacing="2" cellpadding="0">
<tr>
<td>
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; line-height:15px;"><span style=" font-size:12px;">1 </span></p></td>
<td>
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; line-height:15px;"><a name="crayon-5a4ce6b75477a888607478-1"></a><span style=" font-size:12px;">A</span><span style=" font-size:12px;">ctiveSheet</span><span style=" font-size:12px;">.Range(&quot;A1&quot;).Value = &quot;Test&quot;</span></p></td></tr></table>
<p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Поэтому выхода два - либо активировать сначала нужный лист, либо записать без активации. </p>
<p style=" margin-top:12px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; line-height:15px;"><a name="crayon-5a4ce6b75477f559004461"></a><span style=" font-size:12px;">'</span><span style=" font-size:12px;">активируем Лист2 Worksheets(&quot;Лист2&quot;).Select 'записываем слово Test в ячейку A1 Range(&quot;A1&quot;).Value = &quot;Test&quot;</span><span style=" font-size:12px;"> </span></p>
<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:12px;"><br /></p>
<table border="0" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px;" cellspacing="2" cellpadding="0">
<tr>
<td>
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; line-height:15px;"><span style=" font-size:12px;">1</span></p>
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:12px;">2</span></p>
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:12px;">3</span></p>
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:12px;">4 </span></p></td>
<td>
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; line-height:15px;"><a name="crayon-5a4ce6b75477f559004461-1"></a><span style=" font-size:12px;">'</span><span style=" font-size:12px;">активируем Лист2</span></p>
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a name="crayon-5a4ce6b75477f559004461-2"></a><span style=" font-size:12px;">W</span><span style=" font-size:12px;">orksheets</span><span style=" font-size:12px;">(&quot;Лист2&quot;).Select</span></p>
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a name="crayon-5a4ce6b75477f559004461-3"></a><span style=" font-size:12px;">'</span><span style=" font-size:12px;">записываем слово Test в ячейку A1</span></p>
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a name="crayon-5a4ce6b75477f559004461-4"></a><span style=" font-size:12px;">R</span><span style=" font-size:12px;">ange</span><span style=" font-size:12px;">(&quot;A1&quot;).Value = &quot;Test&quot;</span></p></td></tr></table>
<p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Чтобы не активируя другой лист записать в него данные, необходимо явно указать принадлежность объекта Range именно этому листу: </p>
<p style=" margin-top:12px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; line-height:15px;"><a name="crayon-5a4ce6b754783462034318"></a><span style=" font-size:12px;">'</span><span style=" font-size:12px;">запишем слово Test в ячейку A1 на Лист2 независимо от того, какой лист активен Worksheets(&quot;Лист2&quot;).Range(&quot;A1&quot;).Value = &quot;Test&quot;</span><span style=" font-size:12px;"> </span></p>
<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:12px;"><br /></p>
<table border="0" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px;" cellspacing="2" cellpadding="0">
<tr>
<td>
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; line-height:15px;"><span style=" font-size:12px;">1</span></p>
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:12px;">2 </span></p></td>
<td>
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; line-height:15px;"><a name="crayon-5a4ce6b754783462034318-1"></a><span style=" font-size:12px;">'</span><span style=" font-size:12px;">запишем слово Test в ячейку A1 на Лист2 независимо от того, какой лист активен</span></p>
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a name="crayon-5a4ce6b754783462034318-2"></a><span style=" font-size:12px;">W</span><span style=" font-size:12px;">orksheets</span><span style=" font-size:12px;">(&quot;Лист2&quot;).Range(&quot;A1&quot;).Value = &quot;Test&quot;</span></p></td></tr></table>
<p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Таким же образом происходит считывание данных с ячеек - если не указывать лист, данные ячеек которого необходимо считать - считаны будут данные с ячейки активного листа. Чтобы считать данные с Лист2 независимо от того, какой лист активен применяется такой код: </p>
<p style=" margin-top:12px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; line-height:15px;"><a name="crayon-5a4ce6b754788901689739"></a><span style=" font-size:12px;">'</span><span style=" font-size:12px;">считываем значение ячейки A1 с Лист2 независимо от того, какой лист активен MsgBox Worksheets(&quot;Лист2&quot;).Range(&quot;A1&quot;).Value</span><span style=" font-size:12px;"> </span></p>
<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:12px;"><br /></p>
<table border="0" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px;" cellspacing="2" cellpadding="0">
<tr>
<td>
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; line-height:15px;"><span style=" font-size:12px;">1</span></p>
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:12px;">2 </span></p></td>
<td>
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; line-height:15px;"><a name="crayon-5a4ce6b754788901689739-1"></a><span style=" font-size:12px;">'</span><span style=" font-size:12px;">считываем значение ячейки A1 с Лист2 независимо от того, какой лист активен</span></p>
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a name="crayon-5a4ce6b754788901689739-2"></a><span style=" font-size:12px;">M</span><span style=" font-size:12px;">sgBox </span><span style=" font-size:12px;">Worksheets(&quot;Лист2&quot;).Range(&quot;A1&quot;).Value</span></p></td></tr></table>
<p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Т.к. ячейка является частью листа, то лист в свою очередь является частью книги. Исходя из того легко сделать вывод, что при открытых двух и более книгах мы так же можем обратиться к ячейкам любого листа любой открытой книги не активируя при этом ни книгу, ни лист: </p>
<p style=" margin-top:12px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; line-height:15px;"><a name="crayon-5a4ce6b75478d585918208"></a><span style=" font-size:12px;">'</span><span style=" font-size:12px;">запишем слово Test в ячейку A1 на Лист2 книги Книга2.xlsx независимо от того, какая книга и какой лист активен Workbooks(&quot;Книга2.xlsx&quot;).Worksheets(&quot;Лист2&quot;).Range(&quot;A1&quot;).Value = &quot;Test&quot; 'считываем значение ячейки A1 с Лист2 книги Книга3.xlsx независимо от того, какой лист активен MsgBox Workbooks(&quot;Книга3.xlsx&quot;).Worksheets(&quot;Лист2&quot;).Range(&quot;A1&quot;).Value</span><span style=" font-size:12px;"> </span></p>
<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:12px;"><br /></p>
<table border="0" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px;" cellspacing="2" cellpadding="0">
<tr>
<td>
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; line-height:15px;"><span style=" font-size:12px;">1</span></p>
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:12px;">2</span></p>
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:12px;">3</span></p>
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:12px;">4 </span></p></td>
<td>
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; line-height:15px;"><a name="crayon-5a4ce6b75478d585918208-1"></a><span style=" font-size:12px;">'</span><span style=" font-size:12px;">запишем слово Test в ячейку A1 на Лист2 книги Книга2.xlsx независимо от того, какая книга и какой лист активен</span></p>
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a name="crayon-5a4ce6b75478d585918208-2"></a><span style=" font-size:12px;">W</span><span style=" font-size:12px;">orkbooks</span><span style=" font-size:12px;">(&quot;Книга2.xlsx&quot;).Worksheets(&quot;Лист2&quot;).Range(&quot;A1&quot;).Value = &quot;Test&quot;</span></p>
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a name="crayon-5a4ce6b75478d585918208-3"></a><span style=" font-size:12px;">'</span><span style=" font-size:12px;">считываем значение ячейки A1 с Лист2 книги Книга3.xlsx независимо от того, какой лист активен</span></p>
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a name="crayon-5a4ce6b75478d585918208-4"></a><span style=" font-size:12px;">M</span><span style=" font-size:12px;">sgBox </span><span style=" font-size:12px;">Workbooks(&quot;Книга3.xlsx&quot;).Worksheets(&quot;Лист2&quot;).Range(&quot;A1&quot;).Value</span></p></td></tr></table>
<p style=" margin-top:12px; margin-bottom:12px; margin-left:40px; margin-right:40px; -qt-block-indent:0; text-indent:0px;">Важный момент: лучше всегда указать имя книги вместе с расширением(.xlsx, xlsm, .xls и т.д.). Если в настройках ОС Windows(<span style=" font-weight:600;">Панель управления</span> -<span style=" font-weight:600;">Параметры папок</span> -вкладка <span style=" font-weight:600;">Вид</span> -<span style=" font-weight:600;">Скрывать расширения для зарегистрированных типов файлов</span>) указано скрывать расширения - то указывать расширение не обязательно - Workbooks(&quot;Книга2&quot;). Но и ошибки не будет, если его указать. Однако, если пункт &quot;Скрывать расширения для зарегистрированных типов файлов&quot; отключен, то указание Workbooks(&quot;Книга2&quot;) обязательно приведет к ошибке.</p>
<hr />
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Очень часто ошибки обращения к ячейкам листов и книг делают начинающие, особенно в циклах по листам. Вот пример неправильного цикла:<br /></p>
<p style=" margin-top:12px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; line-height:15px;"><a name="crayon-5a4ce6b754793590098442"></a><span style=" font-size:12px;">D</span><span style=" font-size:12px;">im wsSh As Worksheet For Each wsSh In ActiveWorkbook.Worksheets Range(&quot;A1&quot;).Value = wsSh.Name 'записываем в ячейку А1 имя листа MsgBox Range(&quot;A1&quot;).Value 'проверяем, то ли имя записалось Next wsSh</span><span style=" font-size:12px;"> </span></p>
<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:12px;"><br /></p>
<table border="0" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px;" cellspacing="2" cellpadding="0">
<tr>
<td>
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; line-height:15px;"><span style=" font-size:12px;">1</span></p>
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:12px;">2</span></p>
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:12px;">3</span></p>
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:12px;">4</span></p>
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:12px;">5 </span></p></td>
<td>
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; line-height:15px;"><a name="crayon-5a4ce6b754793590098442-1"></a><span style=" font-size:12px;">D</span><span style=" font-size:12px;">im</span><span style=" font-size:12px;"> wsSh As Worksheet</span></p>
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a name="crayon-5a4ce6b754793590098442-2"></a><span style=" font-size:12px;">F</span><span style=" font-size:12px;">or</span><span style=" font-size:12px;"> Each wsSh In ActiveWorkbook.Worksheets</span></p>
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a name="crayon-5a4ce6b754793590098442-3"></a><span style=" font-size:12px;"> </span><span style=" font-size:12px;">   </span><span style=" font-size:12px;">Range(&quot;A1&quot;).Value = wsSh.Name 'записываем в ячейку А1 имя листа</span></p>
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a name="crayon-5a4ce6b754793590098442-4"></a><span style=" font-size:12px;"> </span><span style=" font-size:12px;">   </span><span style=" font-size:12px;">MsgBox Range(&quot;A1&quot;).Value 'проверяем, то ли имя записалось</span></p>
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a name="crayon-5a4ce6b754793590098442-5"></a><span style=" font-size:12px;">N</span><span style=" font-size:12px;">ext</span><span style=" font-size:12px;"> wsSh</span></p></td></tr></table>
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><br />MsgBox будет выдавать правильные значения, но сами имена листов будут записываться не на каждый лист, а в последовательно в ячейку активного листа. Поэтому на активном листе в ячейке А1 будет имя последнего листа.<br />А вот так выглядит правильный цикл:<br />Вариант 1 - активация листа(медленный)<br /></p>
<p style=" margin-top:12px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; line-height:15px;"><a name="crayon-5a4ce6b754798157029404"></a><span style=" font-size:12px;">D</span><span style=" font-size:12px;">im wsSh As Worksheet For Each wsSh In ActiveWorkbook.Worksheets wsSh.Activate 'активируем каждый лист Range(&quot;A1&quot;).Value = wsSh.Name 'записываем в ячейку А1 имя листа MsgBox Range(&quot;A1&quot;).Value 'проверяем, то ли имя записалось Next wsSh</span><span style=" font-size:12px;"> </span></p>
<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:12px;"><br /></p>
<table border="0" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px;" cellspacing="2" cellpadding="0">
<tr>
<td>
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; line-height:15px;"><span style=" font-size:12px;">1</span></p>
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:12px;">2</span></p>
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:12px;">3</span></p>
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:12px;">4</span></p>
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:12px;">5</span></p>
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:12px;">6 </span></p></td>
<td>
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; line-height:15px;"><a name="crayon-5a4ce6b754798157029404-1"></a><span style=" font-size:12px;">D</span><span style=" font-size:12px;">im</span><span style=" font-size:12px;"> wsSh As Worksheet</span></p>
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a name="crayon-5a4ce6b754798157029404-2"></a><span style=" font-size:12px;">F</span><span style=" font-size:12px;">or</span><span style=" font-size:12px;"> Each wsSh In ActiveWorkbook.Worksheets</span></p>
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a name="crayon-5a4ce6b754798157029404-3"></a><span style=" font-size:12px;"> </span><span style=" font-size:12px;">   </span><span style=" font-size:12px;">wsSh.Activate 'активируем каждый лист</span></p>
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a name="crayon-5a4ce6b754798157029404-4"></a><span style=" font-size:12px;"> </span><span style=" font-size:12px;">   </span><span style=" font-size:12px;">Range(&quot;A1&quot;).Value = wsSh.Name 'записываем в ячейку А1 имя листа</span></p>
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a name="crayon-5a4ce6b754798157029404-5"></a><span style=" font-size:12px;"> </span><span style=" font-size:12px;">   </span><span style=" font-size:12px;">MsgBox Range(&quot;A1&quot;).Value 'проверяем, то ли имя записалось</span></p>
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a name="crayon-5a4ce6b754798157029404-6"></a><span style=" font-size:12px;">N</span><span style=" font-size:12px;">ext</span><span style=" font-size:12px;"> wsSh</span></p></td></tr></table>
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><br />Вариант 2 - без активации листа(быстрый и более правильный)<br /></p>
<p style=" margin-top:12px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; line-height:15px;"><a name="crayon-5a4ce6b75479d211075573"></a><span style=" font-size:12px;">D</span><span style=" font-size:12px;">im wsSh As Worksheet For Each wsSh In ActiveWorkbook.Worksheets wsSh.Range(&quot;A1&quot;).Value = wsSh.Name 'записываем в ячейку А1 имя листа MsgBox wsSh.Range(&quot;A1&quot;).Value 'проверяем, то ли имя записалось Next wsSh</span><span style=" font-size:12px;"> </span></p>
<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:12px;"><br /></p>
<table border="0" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px;" cellspacing="2" cellpadding="0">
<tr>
<td>
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; line-height:15px;"><span style=" font-size:12px;">1</span></p>
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:12px;">2</span></p>
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:12px;">3</span></p>
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:12px;">4</span></p>
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:12px;">5 </span></p></td>
<td>
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; line-height:15px;"><a name="crayon-5a4ce6b75479d211075573-1"></a><span style=" font-size:12px;">D</span><span style=" font-size:12px;">im</span><span style=" font-size:12px;"> wsSh As Worksheet</span></p>
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a name="crayon-5a4ce6b75479d211075573-2"></a><span style=" font-size:12px;">F</span><span style=" font-size:12px;">or</span><span style=" font-size:12px;"> Each wsSh In ActiveWorkbook.Worksheets</span></p>
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a name="crayon-5a4ce6b75479d211075573-3"></a><span style=" font-size:12px;"> </span><span style=" font-size:12px;">   </span><span style=" font-size:12px;">wsSh.Range(&quot;A1&quot;).Value = wsSh.Name 'записываем в ячейку А1 имя листа</span></p>
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a name="crayon-5a4ce6b75479d211075573-4"></a><span style=" font-size:12px;"> </span><span style=" font-size:12px;">   </span><span style=" font-size:12px;">MsgBox wsSh.Range(&quot;A1&quot;).Value 'проверяем, то ли имя записалось</span></p>
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a name="crayon-5a4ce6b75479d211075573-5"></a><span style=" font-size:12px;">N</span><span style=" font-size:12px;">ext</span><span style=" font-size:12px;"> wsSh</span></p></td></tr></table>
<p style=" margin-top:12px; margin-bottom:12px; margin-left:40px; margin-right:40px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600; color:#ff0000;">Важно:</span> если код записан в модуле листа<span style=" font-style:italic;">(правая кнопка мыши на листе-</span><span style=" font-weight:600; font-style:italic;">Исходный текст</span><span style=" font-style:italic;">)</span> и для объекта Range или Cells родитель явно не указан - тогда в качестве родителя будет использован именно тот лист, в котором записан код, независимо от того какой лист активный. Это следует учитывать, когда располагаете свои коды внутри модулей листов.</p>
<p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">В конструкциях типа <span style=" font-weight:600;">Range(Cells(,),Cells(,))</span> Range является контейнером, в котором указываются ссылки на объекты, из которых и будет создана ссылка на непосредственно конечный объект.<br />Предположим, что активен &quot;Лист1&quot;, а код запущен с листа &quot;Итог&quot;.<br />Если запись будет вида </p>
<p style=" margin-top:12px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; line-height:15px;"><a name="crayon-5a4ce6b7547a2966692971"></a><span style=" font-size:12px;">S</span><span style=" font-size:12px;">heets(&quot;Итог&quot;).Range(Cells(1, 1), Cells(10, 1))</span><span style=" font-size:12px;"> </span></p>
<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:12px;"><br /></p>
<table border="0" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px;" cellspacing="2" cellpadding="0">
<tr>
<td>
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; line-height:15px;"><span style=" font-size:12px;">1 </span></p></td>
<td>
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; line-height:15px;"><a name="crayon-5a4ce6b7547a2966692971-1"></a><span style=" font-size:12px;">S</span><span style=" font-size:12px;">heets</span><span style=" font-size:12px;">(&quot;Итог&quot;).Range(Cells(1, 1), Cells(10, 1))</span></p></td></tr></table>
<p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">это вызовет ошибку &quot;Run-time error '1004': Application-defined or object-defined error&quot;. А ошибка появляется потому, что контейнер и объекты внутри него не могут располагаться на разных листах, равно как и: </p>
<p style=" margin-top:12px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; line-height:15px;"><a name="crayon-5a4ce6b7547a7987166786"></a><span style=" font-size:12px;">S</span><span style=" font-size:12px;">heets(&quot;Итог&quot;).Range(Cells(1, 1), Sheets(&quot;Итог&quot;).Cells(10, 1)) 'запись ниже так же неверна Range(Cells(1, 1), Sheets(&quot;Итог&quot;).Cells(10, 1))</span><span style=" font-size:12px;"> </span></p>
<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:12px;"><br /></p>
<table border="0" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px;" cellspacing="2" cellpadding="0">
<tr>
<td>
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; line-height:15px;"><span style=" font-size:12px;">1</span></p>
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:12px;">2</span></p>
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:12px;">3 </span></p></td>
<td>
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; line-height:15px;"><a name="crayon-5a4ce6b7547a7987166786-1"></a><span style=" font-size:12px;">S</span><span style=" font-size:12px;">heets</span><span style=" font-size:12px;">(&quot;Итог&quot;).Range(Cells(1, 1), Sheets(&quot;Итог&quot;).Cells(10, 1))</span></p>
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a name="crayon-5a4ce6b7547a7987166786-2"></a><span style=" font-size:12px;">'</span><span style=" font-size:12px;">запись ниже так же неверна</span></p>
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a name="crayon-5a4ce6b7547a7987166786-3"></a><span style=" font-size:12px;">R</span><span style=" font-size:12px;">ange</span><span style=" font-size:12px;">(Cells(1, 1), Sheets(&quot;Итог&quot;).Cells(10, 1))</span></p></td></tr></table>
<p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">т.к. ссылки на объекты внутри контейнера относятся к разным листам. <span style=" font-weight:600;">Cells(1, 1)</span> - к активному листу, а <span style=" font-weight:600;">Sheets(&quot;Итог&quot;).Cells(10, 1)</span> - к листу Итог.<br />А вот такие записи будут правильными: </p>
<p style=" margin-top:12px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; line-height:15px;"><a name="crayon-5a4ce6b7547ac252114685"></a><span style=" font-size:12px;">S</span><span style=" font-size:12px;">heets(&quot;Итог&quot;).Range(Sheets(&quot;Итог&quot;).Cells(1, 1), Sheets(&quot;Итог&quot;).Cells(10, 1)) Range(Sheets(&quot;Итог&quot;).Cells(1, 1), Sheets(&quot;Итог&quot;).Cells(10, 1))</span><span style=" font-size:12px;"> </span></p>
<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:12px;"><br /></p>
<table border="0" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px;" cellspacing="2" cellpadding="0">
<tr>
<td>
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; line-height:15px;"><span style=" font-size:12px;">1</span></p>
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:12px;">2 </span></p></td>
<td>
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; line-height:15px;"><a name="crayon-5a4ce6b7547ac252114685-1"></a><span style=" font-size:12px;">S</span><span style=" font-size:12px;">heets</span><span style=" font-size:12px;">(&quot;Итог&quot;).Range(Sheets(&quot;Итог&quot;).Cells(1, 1), Sheets(&quot;Итог&quot;).Cells(10, 1))</span></p>
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a name="crayon-5a4ce6b7547ac252114685-2"></a><span style=" font-size:12px;">R</span><span style=" font-size:12px;">ange</span><span style=" font-size:12px;">(Sheets(&quot;Итог&quot;).Cells(1, 1), Sheets(&quot;Итог&quot;).Cells(10, 1))</span></p></td></tr></table>
<p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Вторая запись не содержит ссылки на родителя для Range, но ошибки это в большинстве случаев не вызовет - т.к. если для контейнера ссылка не указана, а для двух объектов внутри контейнера родитель один - он будет применен и для самого контейнера. Однако лучше делать как в первой строке - т.е. с обязательным указанием родителя для контейнера и для его составляющих. Т.к. при определенных обстоятельствах(например, если в момент обращения к диапазону активной является книга, открытая в режиме защищенного просмотра) обращение к Range без родителя может вызывать ошибку выполнения.<br />Если запись будет вида <span style=" font-weight:600;">Range(&quot;A1&quot;,&quot;A10&quot;)</span>, то указывать ссылку на родителя внутри Range не обязательно - достаточно будет указать эту ссылку перед самим Range - <span style=" font-weight:600;">Sheets(&quot;Итог&quot;).Range(&quot;A1&quot;,&quot;A10&quot;)</span>, т.к. текстовое представление адреса внутри Range обязывает создать ссылку именно на родителя контейнера.</p>
<p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Разберем пример, приближенный к жизненной ситуации. Необходимо на лист Итог занести формулу вычитания, начиная с ячейки А2 и до последней заполненной. На момент записи активен Лист1. Очень часто начинающие записывают так: </p>
<p style=" margin-top:12px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; line-height:15px;"><a name="crayon-5a4ce6b7547b1298618327"></a><span style=" font-size:12px;">S</span><span style=" font-size:12px;">heets(&quot;Итог&quot;).Range(&quot;A2:A&quot; &amp; Cells(Rows.Count, 1).End(xlUp).Row) _ .FormulaR1C1 = &quot;=RC2-RC11&quot;</span><span style=" font-size:12px;"> </span></p>
<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:12px;"><br /></p>
<table border="0" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px;" cellspacing="2" cellpadding="0">
<tr>
<td>
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; line-height:15px;"><span style=" font-size:12px;">1</span></p>
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:12px;">2 </span></p></td>
<td>
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; line-height:15px;"><a name="crayon-5a4ce6b7547b1298618327-1"></a><span style=" font-size:12px;">S</span><span style=" font-size:12px;">heets</span><span style=" font-size:12px;">(&quot;Итог&quot;).Range(&quot;A2:A&quot; &amp; Cells(Rows.Count, 1).End(xlUp).Row) _</span></p>
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a name="crayon-5a4ce6b7547b1298618327-2"></a><span style=" font-size:12px;"> </span><span style=" font-size:12px;">                                       </span><span style=" font-size:12px;">.FormulaR1C1 = &quot;=RC2-RC11&quot;</span></p></td></tr></table>
<p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Запись смешанная - и текстовое представление адреса ячейки(&quot;A2:A&quot;) и ссылка на объект <span style=" font-weight:600;">Cells</span>. В данном случае явную ошибку код не вызовет, но и работать будет не всегда так, как хотелось бы. А это самое плохое, что может случиться при разработке.<br /><span style=" font-weight:600;">Sheets(&quot;Итог&quot;).Range(&quot;A2:A&quot;</span> - создается ссылка на столбец <a name="crayon-5a4ce6b7547b6443583063"></a><span style=" font-size:12px;">&quot;</span>A <a name="crayon-5a4ce6b7547bb173910943"></a><span style=" font-size:12px;">&quot;</span> листа <span style=" font-weight:600;">Итог</span>. Но далее идет <a href="http://www.excel-vba.ru/chto-umeet-excel/kak-opredelit-poslednyuyu-yachejku-na-liste-cherez-vba/"><span style=" text-decoration: underline; color:#0000ff;">вычисление последней строки</span></a> первого столбца. И вот как раз это вычисление происходит на основе объекта <span style=" font-weight:600;">Cells</span>, который не содержит в себе ссылки на родительский объект. А значит он будет вычислять последнюю строку исключительно для текущего листа<span style=" font-style:italic;">(если код записан в стандартном модуле, а не модуле листа)</span> - т.е. для Лист1. Правильно было бы записать так: </p>
<p style=" margin-top:12px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; line-height:15px;"><a name="crayon-5a4ce6b7547c0285847864"></a><span style=" font-size:12px;">S</span><span style=" font-size:12px;">heets(&quot;Итог&quot;).Range(&quot;A2:A&quot; &amp; Sheets(&quot;Итог&quot;).Cells(Rows.Count, 1).End(xlUp).Row) _ .FormulaR1C1 = &quot;=RC2-RC11&quot;</span><span style=" font-size:12px;"> </span></p>
<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:12px;"><br /></p>
<table border="0" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px;" cellspacing="2" cellpadding="0">
<tr>
<td>
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; line-height:15px;"><span style=" font-size:12px;">1</span></p>
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:12px;">2 </span></p></td>
<td>
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; line-height:15px;"><a name="crayon-5a4ce6b7547c0285847864-1"></a><span style=" font-size:12px;">S</span><span style=" font-size:12px;">heets</span><span style=" font-size:12px;">(&quot;Итог&quot;).Range(&quot;A2:A&quot; &amp; Sheets(&quot;Итог&quot;).Cells(Rows.Count, 1).End(xlUp).Row) _</span></p>
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a name="crayon-5a4ce6b7547c0285847864-2"></a><span style=" font-size:12px;"> </span><span style=" font-size:12px;">                                                     </span><span style=" font-size:12px;">.FormulaR1C1 = &quot;=RC2-RC11&quot;</span></p></td></tr></table>
<p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Но и здесь неверное обращение с диапазоном может сыграть злую шутку. Например, надо получить последнюю заполненную ячейку в конкретной книге: </p>
<p style=" margin-top:12px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; line-height:15px;"><a name="crayon-5a4ce6b7547c5486093244"></a><span style=" font-size:12px;">l</span><span style=" font-size:12px;">LastRow = Workbooks(&quot;Книга3.xls&quot;).Sheets(&quot;Лист1&quot;).Cells(Rows.Count, 1).End(xlUp).Row</span><span style=" font-size:12px;"> </span></p>
<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:12px;"><br /></p>
<table border="0" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px;" cellspacing="2" cellpadding="0">
<tr>
<td>
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; line-height:15px;"><span style=" font-size:12px;">1 </span></p></td>
<td>
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; line-height:15px;"><a name="crayon-5a4ce6b7547c5486093244-1"></a><span style=" font-size:12px;">l</span><span style=" font-size:12px;">LastRow</span><span style=" font-size:12px;"> = Workbooks(&quot;Книга3.xls&quot;).Sheets(&quot;Лист1&quot;).Cells(Rows.Count, 1).End(xlUp).Row</span></p></td></tr></table>
<p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">с виду все нормально, но есть нюанс. Rows.Count по умолчанию будет относится к активной книге, если записано в стандартном модуле. Приведенный выше код должен работать с книгой формата 97-2003 и вычислить последнюю заполненную ячейку на листе1. В книгах формата Excel 97-2003(.xls) всего 65536 строк. Если в момент выполнения приведенной строки активна книга формата 2007 и выше(форматы .xlsx, .xlsm, .xlsb и пр) - то Rows.Count вернет <span style=" font-weight:600;">1048576</span>, т.к. именно такое количество строк в листах книг версий Excel, начиная с 2007. И т.к. в книге, в которой мы пытаемся вычислить последнюю строку всего 65536 строк - получим ошибку 1004, т.к. не может быть номера строки 1048576 на листе с количеством строк 65536. Поэтому имеет смысл указывать явно откуда считывать Rows.Count: </p>
<p style=" margin-top:12px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; line-height:15px;"><a name="crayon-5a4ce6b7547ca776802889"></a><span style=" font-size:12px;">l</span><span style=" font-size:12px;">LastRow = Workbooks(&quot;Книга3.xls&quot;).Sheets(&quot;Лист1&quot;).Cells(Workbooks(&quot;Книга3.xls&quot;).Sheets(&quot;Лист1&quot;).Rows.Count, 1).End(xlUp).Row</span><span style=" font-size:12px;"> </span></p>
<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:12px;"><br /></p>
<table border="0" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px;" cellspacing="2" cellpadding="0">
<tr>
<td>
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; line-height:15px;"><span style=" font-size:12px;">1 </span></p></td>
<td>
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; line-height:15px;"><a name="crayon-5a4ce6b7547ca776802889-1"></a><span style=" font-size:12px;">l</span><span style=" font-size:12px;">LastRow</span><span style=" font-size:12px;"> = Workbooks(&quot;Книга3.xls&quot;).Sheets(&quot;Лист1&quot;).Cells(Workbooks(&quot;Книга3.xls&quot;).Sheets(&quot;Лист1&quot;).Rows.Count, 1).End(xlUp).Row</span></p></td></tr></table>
<p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">или применить конструкцию With </p>
<p style=" margin-top:12px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; line-height:15px;"><a name="crayon-5a4ce6b7547cf894006702"></a><span style=" font-size:12px;">W</span><span style=" font-size:12px;">ith Workbooks(&quot;Книга3.xls&quot;).Sheets(&quot;Лист1&quot;) lLastRow = .Cells(.Rows.Count, 1).End(xlUp).Row End With</span><span style=" font-size:12px;"> </span></p>
<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:12px;"><br /></p>
<table border="0" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px;" cellspacing="2" cellpadding="0">
<tr>
<td>
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; line-height:15px;"><span style=" font-size:12px;">1</span></p>
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:12px;">2</span></p>
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:12px;">3 </span></p></td>
<td>
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; line-height:15px;"><a name="crayon-5a4ce6b7547cf894006702-1"></a><span style=" font-size:12px;">W</span><span style=" font-size:12px;">ith</span><span style=" font-size:12px;"> Workbooks(&quot;Книга3.xls&quot;).Sheets(&quot;Лист1&quot;)</span></p>
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a name="crayon-5a4ce6b7547cf894006702-2"></a><span style=" font-size:12px;"> </span><span style=" font-size:12px;">   </span><span style=" font-size:12px;">lLastRow = .Cells(.Rows.Count, 1).End(xlUp).Row</span></p>
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a name="crayon-5a4ce6b7547cf894006702-3"></a><span style=" font-size:12px;">E</span><span style=" font-size:12px;">nd</span><span style=" font-size:12px;"> With</span></p></td></tr></table>
<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><br /></p>
<hr />
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Также не мешало бы упомянуть возможность выделения несмежного диапазона(часто его называют &quot;рваным&quot;). Это диапазон, который обычно привыкли выделять на листе при помощи зажатой клавиши Ctrl. Что это дает? Это дает возможность выделить одновременно ячейки A1 и B10 и записать значения только в них. Для этого есть несколько способов. Самый очевидный и описанный в справке - метод <span style=" font-weight:600;">Union</span>:<br /></p>
<p style=" margin-top:12px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; line-height:15px;"><a name="crayon-5a4ce6b7547d3529560798"></a><span style=" font-size:12px;">U</span><span style=" font-size:12px;">nion(Range(&quot;A1&quot;), Range(&quot;B10&quot;)).Value = &quot;Привет&quot;</span><span style=" font-size:12px;"> </span></p>
<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:12px;"><br /></p>
<table border="0" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px;" cellspacing="2" cellpadding="0">
<tr>
<td>
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; line-height:15px;"><span style=" font-size:12px;">1 </span></p></td>
<td>
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; line-height:15px;"><a name="crayon-5a4ce6b7547d3529560798-1"></a><span style=" font-size:12px;">U</span><span style=" font-size:12px;">nion</span><span style=" font-size:12px;">(Range(&quot;A1&quot;), Range(&quot;B10&quot;)).Value = &quot;Привет&quot;</span></p></td></tr></table>
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><br />Однако существует и другой метод:<br /></p>
<p style=" margin-top:12px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; line-height:15px;"><a name="crayon-5a4ce6b7547d8681050780"></a><span style=" font-size:12px;">R</span><span style=" font-size:12px;">ange(&quot;A1,B10&quot;).Value = &quot;Привет&quot;</span><span style=" font-size:12px;"> </span></p>
<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:12px;"><br /></p>
<table border="0" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px;" cellspacing="2" cellpadding="0">
<tr>
<td>
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; line-height:15px;"><span style=" font-size:12px;">1 </span></p></td>
<td>
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; line-height:15px;"><a name="crayon-5a4ce6b7547d8681050780-1"></a><span style=" font-size:12px;">R</span><span style=" font-size:12px;">ange</span><span style=" font-size:12px;">(&quot;A1,B10&quot;).Value = &quot;Привет&quot;</span></p></td></tr></table>
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><br />В чем отличие<span style=" font-style:italic;">(я бы даже сказал преимущество)</span> <span style=" font-weight:600;">Union</span>: можно применять в цикле по условию. Например, выделить в диапазоне A1:F50 только те ячейки, значение которых больше 10 и меньше 20:<br /></p>
<p style=" margin-top:12px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; line-height:15px;"><a name="crayon-5a4ce6b7547dd624506914"></a><span style=" font-size:12px;">S</span><span style=" font-size:12px;">ub SelOne() Dim rCell As Range, rSel As Range For Each rCell In Range(&quot;A1:F50&quot;) If rCell.Value &gt; 10 And rCell.Value &lt; 20 Then If rSel Is Nothing Then Set rSel = rCell Else Set rSel = Union(rSel, rCell) End If End If Next rCell If Not rSel Is Nothing Then rSel.Select End Sub</span><span style=" font-size:12px;"> </span></p>
<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:12px;"><br /></p>
<table border="0" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px;" cellspacing="2" cellpadding="0">
<tr>
<td>
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; line-height:15px;"><span style=" font-size:12px;">1</span></p>
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:12px;">2</span></p>
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:12px;">3</span></p>
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:12px;">4</span></p>
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:12px;">5</span></p>
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:12px;">6</span></p>
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:12px;">7</span></p>
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:12px;">8</span></p>
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:12px;">9</span></p>
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:12px;">10</span></p>
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:12px;">11</span></p>
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:12px;">12</span></p>
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:12px;">13 </span></p></td>
<td>
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; line-height:15px;"><a name="crayon-5a4ce6b7547dd624506914-1"></a><span style=" font-size:12px;">S</span><span style=" font-size:12px;">ub</span><span style=" font-size:12px;"> SelOne()</span></p>
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a name="crayon-5a4ce6b7547dd624506914-2"></a><span style=" font-size:12px;"> </span><span style=" font-size:12px;">   </span><span style=" font-size:12px;">Dim rCell As Range, rSel As Range</span></p>
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a name="crayon-5a4ce6b7547dd624506914-3"></a><span style=" font-size:12px;"> </span><span style=" font-size:12px;">   </span><span style=" font-size:12px;">For Each rCell In Range(&quot;A1:F50&quot;)</span></p>
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a name="crayon-5a4ce6b7547dd624506914-4"></a><span style=" font-size:12px;"> </span><span style=" font-size:12px;">       </span><span style=" font-size:12px;">If rCell.Value &gt; 10 And rCell.Value &lt; 20 Then</span></p>
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a name="crayon-5a4ce6b7547dd624506914-5"></a><span style=" font-size:12px;"> </span><span style=" font-size:12px;">           </span><span style=" font-size:12px;">If rSel Is Nothing Then</span></p>
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a name="crayon-5a4ce6b7547dd624506914-6"></a><span style=" font-size:12px;"> </span><span style=" font-size:12px;">               </span><span style=" font-size:12px;">Set rSel = rCell</span></p>
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a name="crayon-5a4ce6b7547dd624506914-7"></a><span style=" font-size:12px;"> </span><span style=" font-size:12px;">           </span><span style=" font-size:12px;">Else</span></p>
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a name="crayon-5a4ce6b7547dd624506914-8"></a><span style=" font-size:12px;"> </span><span style=" font-size:12px;">               </span><span style=" font-size:12px;">Set rSel = Union(rSel, rCell)</span></p>
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a name="crayon-5a4ce6b7547dd624506914-9"></a><span style=" font-size:12px;"> </span><span style=" font-size:12px;">           </span><span style=" font-size:12px;">End If</span></p>
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a name="crayon-5a4ce6b7547dd624506914-10"></a><span style=" font-size:12px;"> </span><span style=" font-size:12px;">       </span><span style=" font-size:12px;">End If</span></p>
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a name="crayon-5a4ce6b7547dd624506914-11"></a><span style=" font-size:12px;"> </span><span style=" font-size:12px;">   </span><span style=" font-size:12px;">Next rCell</span></p>
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a name="crayon-5a4ce6b7547dd624506914-12"></a><span style=" font-size:12px;"> </span><span style=" font-size:12px;">   </span><span style=" font-size:12px;">If Not rSel Is Nothing Then rSel.Select</span></p>
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a name="crayon-5a4ce6b7547dd624506914-13"></a><span style=" font-size:12px;">E</span><span style=" font-size:12px;">nd</span><span style=" font-size:12px;"> Sub</span></p></td></tr></table>
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><br />Конечно, можно и просто в Range через запятую передать все эти ячейки, сформировав предварительно строку. Но в случае со строкой действует ограничение: длина строки не должна превышать 255 символов.</p>
<p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Надеюсь, что после прочтения данной статьи проблем с обращением к диапазонам и ячейкам у Вас будет гораздо меньше.</p>
<p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"> </p></body></html>